"""
File:04_SSH登陆模块paramiko.py
Author:Tcyw
Date:2020-05-04
Connect:741047561@qq.com
Description:

"""
import paramiko


# def login_ssh_passwd(host, port, user, password, command):
#     # 实例化客户端SSH对象
#     with paramiko.SSHClient() as client:
#         # 自动添加策略,保存服务器的主机名和密钥信息,如果不添加,那么不再本地know_hosts文件中记录的主机将无法连接
#         client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#         # 通过用户名和密码连接远程服务器，
#         client.connect(
#             hostname=host,
#             port=port,
#             username=user,
#             password=password
#         )
#         # 连接成功后执行命令
#         # print(type(client.exec_command(command)))
#         # print(client.exec_command(command))
#         stdin, stdout, stderr = client.exec_command(command)
#         # 获取命令执行的正确输出
#         return stdout.read().decode('utf-8')
#         # return stdin, stdout, stderr


def login_ssh_key(hostname, keyfile, username, port, command):
        """
        基于paramiko实现ssh的自动化密钥管理
        """
        # 配置私人密钥文件位置
        private = paramiko.RSAKey.from_private_key_file(keyfile)
        # 实例化SSHClient
        with paramiko.SSHClient() as client:
            # 自动添加策略,保存服务器的主机名和密钥信息,如果不添加,那么不再本地know_hosts文件中记录的主机将无法连接
            client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            # 连接SSH服务端,以用户名和密码进行认证
            client.connect(hostname=hostname, port=port, username=username,
                           pkey=private)
            # 打开一个Channel并执行命令。 stdout 为正确输出,stderr为错误输出,同时是有1个变量有值
            stdin, stdout, stderr = client.exec_command(command)
            # 打印执行结果
            return stdout.read().decode('utf-8')

if __name__ == '__main__':
    stdout = login_ssh_key('172.25.254.15', './id_rsa', 'kiosk', 22, 'hostname')
    print(stdout)
